Skip to content

438 integrate xsens imu#441

Open
geurto wants to merge 120 commits intomainfrom
438-integrate-xsens-imu
Open

438 integrate xsens imu#441
geurto wants to merge 120 commits intomainfrom
438-integrate-xsens-imu

Conversation

@geurto
Copy link
Copy Markdown
Collaborator

@geurto geurto commented Apr 10, 2026

Description

This PR adds the alliander_xsens package, which integrates the Xsens IMU.

  • Imu platform added
  • Xsens driver node added
  • IMU bridge added to bridge topics for madgwick filter (optional for future IMUs)
  • Madgwick filter added to obtain heading estimate from magnetic field + angular velocity + linear acceleration measurements (optional for future IMUs)
  • (downsampled) mesh added for Xsens IMU, along with URDF

Fixes: #438

Testing

  • Tested in simulation to ensure URDF/mesh is correct
  • Tested with hardware on laptop
  • Tested with hardware on PAnther

Documentation

  • I have updated the documentation (if necessary)

Additional Notes

Any relevant screenshots, logs, or context.

@geurto geurto linked an issue Apr 10, 2026 that may be closed by this pull request
4 tasks
@geurto geurto force-pushed the 438-integrate-xsens-imu branch from 280f663 to c509014 Compare April 30, 2026 14:32
geurto and others added 28 commits April 30, 2026 16:34
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…tory to Rviz

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
… location with more obstacles; increased inflation radius and decreased cost scaling factor to make falloff costs smoother

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…data on your laptop

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…emapped topic in odometry

Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <25298249+geurto@users.noreply.github.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…o back to pytest.fail and trigger more often

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
geurto and others added 7 commits April 30, 2026 16:34
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Bumps [lxml](https://github.com/lxml/lxml) from 6.0.2 to 6.1.0.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](lxml/lxml@lxml-6.0.2...lxml-6.1.0)

---
updated-dependencies:
- dependency-name: lxml
  dependency-version: 6.1.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Bumps [python-multipart](https://github.com/Kludex/python-multipart) from 0.0.22 to 0.0.26.
- [Release notes](https://github.com/Kludex/python-multipart/releases)
- [Changelog](https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md)
- [Commits](Kludex/python-multipart@0.0.22...0.0.26)

---
updated-dependencies:
- dependency-name: python-multipart
  dependency-version: 0.0.26
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to 9.0.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](pytest-dev/pytest@9.0.2...9.0.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
* Add Meta platform to our system.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* First teleoperation.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Rewrite teleoperation python node to CPP meta manager node.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Use meta as flag, not as platform.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add support for GUI debugging using dev container.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Tune servo params.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Switch to meta_quest_reader package.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Switch to ppadb-reborn that includes fixes for escape sequences.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add scrcpy to stream quest.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Start other containers only when meta launches correctly.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix linting.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Fix configuration, to support Meta, Joystick and GUI.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Set servo command type from joystick manager and meta manager.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Add documentation.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Undo scale changes in servo params.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

* Apply feedback.

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>

---------

Signed-off-by: Jelmer de Wolde <jelmer.de.wolde@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
…cmd_vel_final to cause no confusion

Signed-off-by: Rosalie <rosalie.van.ark@alliander.com>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
@geurto geurto force-pushed the 438-integrate-xsens-imu branch from c509014 to 0ca29e9 Compare April 30, 2026 14:35
Signed-off-by: Peter Geurts <25298249+geurto@users.noreply.github.com>
@geurto geurto marked this pull request as ready for review April 30, 2026 14:38
geurto added 2 commits April 30, 2026 16:48
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
@geurto geurto marked this pull request as draft April 30, 2026 14:55
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
@geurto geurto marked this pull request as ready for review April 30, 2026 15:01
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Comment thread pyproject.toml
]
alliander-xsens = [
"matplotlib>=3.10.9",
"pyserial>=3.5",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does pyserial still need to be added here when it's also already added to the project dependencies at the top of this file?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good find!


@staticmethod
def add_imu(_platform: IMU) -> None:
"""Add IMU configurtions to Rviz and Vizanti. Currently not implemented.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be made into a ticket because it's currently not implemented? It's a bit inconsistent that we have an error for "not implemented" and we bypass this, with the additional comment being "not implemented".

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The NotImplementedError crashes the container, which I don't want. There is an rviz_imu_plugin available, but Rviz cannot handle the data rates. I found just echoing ROS2 topics just as useful for debugging. If there is a use case in the future for this, it could be worth integrating the rviz_imu_plugin.

@@ -0,0 +1,270 @@
# SPDX-FileCopyrightText: Alliander N. V.
#
# SPDX-License-Identifier: Apache-2.0
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add the source of this yaml file on top here? Like we also do in some other files, Based on: ...

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

# Install python dependencies:
WORKDIR $WORKDIR
COPY pyproject.toml /$WORKDIR/pyproject.toml
RUN uv sync \
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't add alliander-xsens then it either can be removed from pyproject.toml or it should be added here right?

ip_address="10.15.20.5",
)
gps = GPS("gps", position=(-0.08, -0.25, 0.2), orientation=(0, 0, -90))
imu = IMU("xsens", position=(-0.23, -0.08, 0.18), orientation=(0, 0, 180))
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the IMU also already be added to more configurations?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this one because I'm using it for Panther testing, if other use cases need an IMU I will add it once we work on them

@@ -0,0 +1,161 @@
#!/usr/bin/env python3
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!!

rosalievanark

This comment was marked as outdated.

geurto added 2 commits May 4, 2026 14:24
Signed-off-by: Peter Geurts <peter.geurts@proton.me>
Signed-off-by: Peter Geurts <peter.geurts@proton.me>

# Shared folders:
install(
DIRECTORY franka husarion ouster velodyne realsense zed nmea_gps
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you want alphabetic order? (If so, we should swap velodyne and realsense).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't know this test was in alliander_nav2. I think all other tests are in alliander_tests? Should we move this file?

Copy link
Copy Markdown
Collaborator

@Jelmerdw Jelmerdw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also consider removing the NotImplementedError and just pass by default. Since not all platforms require special RViz configurations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Integrate Xsens IMU

3 participants